#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
	int server_sockfd, client_sockfd;
	int server_len, client_len;
	struct sockaddr_un server_address;
	struct sockaddr_un client_address;

	//creat socket
	unlink("local_server_socket");  //delete existed the same socket
	server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);

	//name server socket
	server_address.sun_family = AF_UNIX;
	strcpy(server_address.sun_path, "local_server_socket");
	server_len = sizeof(server_address);
	bind(server_sockfd, (struct sockaddr *)&server_address, server_len);

	//create revd queue
	listen(server_sockfd, 5);

	while(1) {
		char ch;

		printf("server waiting...\n");

		//revd a connection
		client_len = sizeof(client_address);
		client_sockfd = accept(server_sockfd, 
				(struct sockaddr*)&client_address, &client_len);
		
		//send and recv message via client_sockfd
		printf("read more ...\n");
		read(client_sockfd, &ch, 1);
		printf("read message is \"%c\"\n", ch);

		ch++;
		printf("delay 3 seconds to respond client.\n");
		sleep(3);
		write(client_sockfd, &ch, 1);
		close(client_sockfd);	
	}

	close(server_sockfd);
	exit(0);
	
}
